Valid palindrome II¶
Time: O(N); Space: O(1); easy
Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.
Example 1:
Input: s = “aba”
Output: True
Example 2:
Input: s = “abca”
Output: True
Explanation:
You could delete the character ‘c’.
Constraints:
The string will only contain lowercase characters a-z.
The maximum length of the string is 50000.
[1]:
class Solution1(object):
"""
Time: O(N)
Space: O(1)
"""
def validPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
def validPalindrome(s, left, right):
while left < right:
if s[left] != s[right]:
return False
left, right = left+1, right-1
return True
left, right = 0, len(s)-1
while left < right:
if s[left] != s[right]:
return validPalindrome(s, left, right-1) or validPalindrome(s, left+1, right)
left, right = left+1, right-1
return True
[2]:
sol = Solution1()
s = "aba"
assert sol.validPalindrome(s) == True
s = "abca"
assert sol.validPalindrome(s) == True